package com.jprocms.module.cms.dal.mysql.model;

import com.jpro.framework.common.pojo.PageResult;
import com.jpro.framework.mybatis.core.mapper.BaseMapperX;
import com.jpro.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jprocms.module.cms.controller.admin.model.vo.ModelPageReqVO;
import com.jprocms.module.cms.controller.admin.model.vo.ModelQueryReqVO;
import com.jprocms.module.cms.dal.dataobject.model.ModelDO;
import com.jprocms.module.cms.enums.EnumModelGlobal;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 模型 Mapper
 *
 * @author jprocms
 */
@Mapper
public interface ModelMapper extends BaseMapperX<ModelDO> {

    default PageResult<ModelDO> selectPage(ModelPageReqVO reqVO) {
        LambdaQueryWrapperX<ModelDO> queryWrapperX = new LambdaQueryWrapperX<ModelDO>();
        queryWrapperX.likeIfPresent(ModelDO::getName, reqVO.getName());
        queryWrapperX.eqIfPresent(ModelDO::getIsGlobal, reqVO.getIsGlobal());
        queryWrapperX.eqIfPresent(ModelDO::getStatus, reqVO.getStatus());
        queryWrapperX.eqIfPresent(ModelDO::getModelType, reqVO.getModelType());
        queryWrapperX.orderByAsc(ModelDO::getSort);
        queryWrapperX.and(wrapper ->
                wrapper.eq(ModelDO::getSiteId, reqVO.getSiteId())
                        .or()
                        .eq(ModelDO::getIsGlobal, EnumModelGlobal.GLOBAL.getGlobal()));
        return selectPage(reqVO, queryWrapperX);
    }

    default List<ModelDO> selectList(ModelQueryReqVO reqVO) {
        LambdaQueryWrapper<ModelDO> queryWrapperX = new LambdaQueryWrapperX<ModelDO>()
                .likeIfPresent(ModelDO::getName, reqVO.getName())
                .eqIfPresent(ModelDO::getIsGlobal, reqVO.getIsGlobal())
                .eqIfPresent(ModelDO::getStatus, reqVO.getStatus())
                .eqIfPresent(ModelDO::getModelType, reqVO.getModelType())
                .orderByAsc(ModelDO::getSort);
        queryWrapperX.and(wrapper ->
                wrapper.eq(ModelDO::getSiteId, reqVO.getSiteId())
                        .or()
                        .eq(ModelDO::getIsGlobal, EnumModelGlobal.GLOBAL.getGlobal()));
        return selectList(queryWrapperX);
    }

}
